﻿Imports System.Data.SqlClient
Imports UTNComputers.clsConfiguraciones
Imports UTNComputers.daoConfiguraciones
Imports UTNComputers.clsCatalogo
Public Class daoCatalogo
    'Funcion para el alta de Articulos a catalogo'
    Public Function Alta(ByVal Articulo As clsCatalogo) As Boolean
        Dim Cn As New SqlConnection
        Dim Cm As New SqlCommand

        Try
            Cn.ConnectionString = My.Resources.Conexion
            Cn.Open()
            Cm.CommandType = CommandType.StoredProcedure
            Cm.CommandText = "SP_ALTA_CATALOGO"

            Cm.Parameters.Add("@prod_id", SqlDbType.VarChar)
            Cm.Parameters.Add("@marca", SqlDbType.VarChar)
            Cm.Parameters.Add("@modelo", SqlDbType.VarChar)
            Cm.Parameters.Add("@cantidad", SqlDbType.Int)
            Cm.Parameters.Add("@proveedor", SqlDbType.VarChar)
            Cm.Parameters.Add("@costo", SqlDbType.Decimal)
            Cm.Parameters.Add("@descripcion", SqlDbType.VarChar)
            Cm.Parameters.Add("@tipo", SqlDbType.VarChar)
            Cm.Parameters.Add("@fecha_ingreso", SqlDbType.SmallDateTime)
            Cm.Parameters.Add("@Cod_Suc", SqlDbType.Int)

            Cm.Parameters("@prod_id").Value = Articulo.Prod_Id
            Cm.Parameters("@marca").Value = Articulo.Marca.Trim.ToUpper
            Cm.Parameters("@modelo").Value = Articulo.Modelo.Trim.ToUpper
            Cm.Parameters("@cantidad").Value = Articulo.Cantidad
            Cm.Parameters("@proveedor").Value = Articulo.Proveedor.Trim.ToUpper
            Cm.Parameters("@costo").Value = Articulo.Costo
            Cm.Parameters("@descripcion").Value = Articulo.Descripcion.Trim.ToUpper
            Cm.Parameters("@tipo").Value = Articulo.Tipo.Trim.ToUpper
            Cm.Parameters("@fecha_ingreso").Value = Articulo.Fecha_Ingreso
            Cm.Parameters("@Cod_Suc").Value = Articulo.Cod_Suc

            Cm.Connection = Cn

            Cm.ExecuteNonQuery()
            Cn.Close()
            Return True

        Catch ex As Exception
            Return False
        Finally
            Cn.Dispose()
            Cm.Dispose()
        End Try
    End Function

    'Funcion para la modificacion de Articulos a catalogo'
    Public Function Modificar(ByVal Articulo As clsCatalogo) As Boolean
        Dim Cn As New SqlConnection
        Dim Cm As New SqlCommand

        Try
            Cn.ConnectionString = My.Resources.Conexion
            Cn.Open()
            Cm.CommandType = CommandType.StoredProcedure
            Cm.CommandText = "SP_MODI_CATALOGO"

            Cm.Parameters.Add("@prod_id", SqlDbType.VarChar)
            Cm.Parameters.Add("@marca", SqlDbType.VarChar)
            Cm.Parameters.Add("@modelo", SqlDbType.VarChar)
            Cm.Parameters.Add("@cantidad", SqlDbType.Int)
            Cm.Parameters.Add("@proveedor", SqlDbType.VarChar)
            Cm.Parameters.Add("@costo", SqlDbType.Decimal)
            Cm.Parameters.Add("@descripcion", SqlDbType.VarChar)
            Cm.Parameters.Add("@tipo", SqlDbType.VarChar)
            Cm.Parameters.Add("@fecha_ingreso", SqlDbType.SmallDateTime)
            Cm.Parameters.Add("@Cod_Suc", SqlDbType.Int)

            Cm.Parameters("@prod_id").Value = Articulo.Prod_Id
            Cm.Parameters("@marca").Value = Articulo.Marca.Trim.ToUpper
            Cm.Parameters("@modelo").Value = Articulo.Modelo.Trim.ToUpper
            Cm.Parameters("@cantidad").Value = Articulo.Cantidad
            Cm.Parameters("@proveedor").Value = Articulo.Proveedor.Trim.ToUpper
            Cm.Parameters("@costo").Value = Articulo.Costo
            Cm.Parameters("@descripcion").Value = Articulo.Descripcion.Trim.ToUpper
            Cm.Parameters("@tipo").Value = Articulo.Tipo.Trim.ToUpper
            Cm.Parameters("@fecha_ingreso").Value = Articulo.Fecha_Ingreso
            Cm.Parameters("@Cod_Suc").Value = Articulo.Cod_Suc

            Cm.Connection = Cn

            Cm.ExecuteNonQuery()
            Cn.Close()
            Return True

        Catch ex As Exception
            Return False
        Finally
            Cn.Dispose()
            Cm.Dispose()
        End Try
    End Function

    'Funcion para Traer un articulo por Id de Articulo'
    Public Function TraeArticulo(ByVal pord_id As Integer) As clsCatalogo
        Dim Cn As New SqlClient.SqlConnection
        Dim Cm As New SqlClient.SqlCommand
        Dim Dr As SqlClient.SqlDataReader
        Dim Producto As New clsCatalogo()

        Dim Conf As New clsConfiguraciones()
        Dim dao_Conf As New daoConfiguraciones()
        Conf = dao_Conf.TraeConfiguraciones()

        Try
            Cn.ConnectionString = My.Resources.Conexion
            Cn.Open()
            Cm.CommandType = CommandType.StoredProcedure
            Cm.CommandText = "SP_TRAER_ARTICULO"

            Cm.Parameters.Add("@prod_id", SqlDbType.Int)
            Cm.Parameters("@prod_id").Value = pord_id

            Cm.Parameters.Add("@Cod_Suc", SqlDbType.Int)
            Cm.Parameters("@Cod_Suc").Value = Conf.Cod_Suc

            Cm.Connection = Cn
            Dr = Cm.ExecuteReader
            If Dr.HasRows = True Then
                While Dr.Read
                    Producto.Prod_Id = Dr.GetInt32(0)
                    If Dr.IsDBNull(1) Then
                        Producto.Marca = "-"
                    Else
                        Producto.Marca = Dr.GetString(1).Trim.ToUpper
                    End If
                    If Dr.IsDBNull(2) Then
                        Producto.Modelo = "-"
                    Else
                        Producto.Modelo = Dr.GetString(2).Trim.ToUpper
                    End If

                    Producto.Cantidad = Dr.GetInt32(3)

                    If Dr.IsDBNull(4) Then
                        Producto.Proveedor = "-"
                    Else
                        Producto.Proveedor = Dr.GetString(4).Trim.ToUpper
                    End If

                    If Dr.IsDBNull(5) Then
                        Producto.Costo = 0
                    Else
                        Producto.Costo = Dr.GetDecimal(5)
                    End If

                    If Dr.IsDBNull(6) Then
                        Producto.Descripcion = "-"
                    Else
                        Producto.Descripcion = Dr.GetString(6).Trim.ToUpper
                    End If

                    Producto.Tipo = Dr.GetString(7).Trim.ToUpper
                    Producto.Fecha_Ingreso = Dr.GetDateTime(8)
                    Producto.Cod_Suc = Dr.GetInt32(9)

                End While

                Dr.Close()
                Cn.Close()
            End If
            Return Producto
        Catch ex As Exception
            Throw New Exception(ex.Message)
        Finally
            Conf.Dispose()
            Cn.Dispose()
            Cm.Dispose()
        End Try
    End Function

    'Funcion para Traer Todos los Articulo'
    Public Function TraeArticulos() As List(Of clsCatalogo)
        Dim Cn As New SqlClient.SqlConnection
        Dim Cm As New SqlClient.SqlCommand
        Dim Dr As SqlClient.SqlDataReader
        Dim ListaArticulos As New List(Of clsCatalogo)

        Dim Conf As New clsConfiguraciones()
        Dim dao_Conf As New daoConfiguraciones()
        Conf = dao_Conf.TraeConfiguraciones()

        Try
            Cn.ConnectionString = My.Resources.Conexion
            Cn.Open()
            Cm.CommandType = CommandType.StoredProcedure
            Cm.CommandText = "SP_TRAER_ARTICULOS_TODOS"

            Cm.Parameters.Add("@Cod_Suc", SqlDbType.Int)
            Cm.Parameters("@Cod_Suc").Value = Conf.Cod_Suc

            Cm.Connection = Cn
            Dr = Cm.ExecuteReader
            If Dr.HasRows = True Then
                While Dr.Read
                    Dim Producto As New clsCatalogo()
                    Producto.Prod_Id = Dr.GetInt32(0)
                    If Dr.IsDBNull(1) Then
                        Producto.Marca = "-"
                    Else
                        Producto.Marca = Dr.GetString(1).Trim.ToUpper
                    End If
                    If Dr.IsDBNull(2) Then
                        Producto.Modelo = "-"
                    Else
                        Producto.Modelo = Dr.GetString(2).Trim.ToUpper
                    End If

                    Producto.Cantidad = Dr.GetInt32(3)

                    If Dr.IsDBNull(4) Then
                        Producto.Proveedor = "-"
                    Else
                        Producto.Proveedor = Dr.GetString(4).Trim.ToUpper
                    End If

                    If Dr.IsDBNull(5) Then
                        Producto.Costo = 0
                    Else
                        Producto.Costo = Dr.GetDecimal(5)
                    End If

                    If Dr.IsDBNull(6) Then
                        Producto.Descripcion = "-"
                    Else
                        Producto.Descripcion = Dr.GetString(6).Trim.ToUpper
                    End If

                    Producto.Tipo = Dr.GetString(7).Trim.ToUpper
                    Producto.Fecha_Ingreso = Dr.GetDateTime(8)
                    Producto.Cod_Suc = Dr.GetInt32(9)

                    ListaArticulos.Add(Producto)
                    Producto.Dispose()
                End While

                Dr.Close()
                Cn.Close()
            End If
            Return ListaArticulos
        Catch ex As Exception
            Throw New Exception(ex.Message)
        Finally
            Conf.Dispose()
            Cn.Dispose()
            Cm.Dispose()
        End Try
    End Function

    'Funcion para  Articulo por descripcion'
    Public Function TraeArticulos(ByVal Descripcion As String) As List(Of clsCatalogo)
        Descripcion = "%" & Descripcion & "%"
        Dim Cn As New SqlClient.SqlConnection
        Dim Cm As New SqlClient.SqlCommand
        Dim Dr As SqlClient.SqlDataReader
        Dim ListaArticulos As New List(Of clsCatalogo)

        Dim Conf As New clsConfiguraciones()
        Dim dao_Conf As New daoConfiguraciones()
        Conf = dao_Conf.TraeConfiguraciones()

        Try
            Cn.ConnectionString = My.Resources.Conexion
            Cn.Open()
            Cm.CommandType = CommandType.StoredProcedure
            Cm.CommandText = "SP_TRAER_ARTICULOS_X_DESCRIPCION"

            Cm.Parameters.Add("@Descripcion", SqlDbType.VarChar)
            Cm.Parameters("@Descripcion").Value = Descripcion

            Cm.Parameters.Add("@Cod_Suc", SqlDbType.Int)
            Cm.Parameters("@Cod_Suc").Value = Conf.Cod_Suc

            Cm.Connection = Cn
            Dr = Cm.ExecuteReader
            If Dr.HasRows = True Then
                While Dr.Read
                    Dim Producto As New clsCatalogo()
                    Producto.Prod_Id = Dr.GetInt32(0)
                    If Dr.IsDBNull(1) Then
                        Producto.Marca = "-"
                    Else
                        Producto.Marca = Dr.GetString(1).Trim.ToUpper
                    End If
                    If Dr.IsDBNull(2) Then
                        Producto.Modelo = "-"
                    Else
                        Producto.Modelo = Dr.GetString(2).Trim.ToUpper
                    End If

                    Producto.Cantidad = Dr.GetInt32(3)

                    If Dr.IsDBNull(4) Then
                        Producto.Proveedor = "-"
                    Else
                        Producto.Proveedor = Dr.GetString(4).Trim.ToUpper
                    End If

                    If Dr.IsDBNull(5) Then
                        Producto.Costo = 0
                    Else
                        Producto.Costo = Dr.GetDecimal(5)
                    End If

                    If Dr.IsDBNull(6) Then
                        Producto.Descripcion = "-"
                    Else
                        Producto.Descripcion = Dr.GetString(6).Trim.ToUpper
                    End If

                    Producto.Tipo = Dr.GetString(7).Trim.ToUpper
                    Producto.Fecha_Ingreso = Dr.GetDateTime(8)
                    Producto.Cod_Suc = Dr.GetInt32(9)

                    ListaArticulos.Add(Producto)
                    Producto.Dispose()
                End While

                Dr.Close()
                Cn.Close()
            End If
            Return ListaArticulos
        Catch ex As Exception
            Throw New Exception(ex.Message)
        Finally
            Conf.Dispose()
            Cn.Dispose()
            Cm.Dispose()
        End Try
    End Function

    'Funcion para Traer Todos los Articulo por sucursal'
    Public Function TraeArticulosPorSucursal(ByVal Cod_suc As Int32) As List(Of clsCatalogo)
        Dim Cn As New SqlClient.SqlConnection
        Dim Cm As New SqlClient.SqlCommand
        Dim Dr As SqlClient.SqlDataReader
        Dim ListaArticulos As New List(Of clsCatalogo)

        Try
            Cn.ConnectionString = My.Resources.Conexion
            Cn.Open()
            Cm.CommandType = CommandType.StoredProcedure
            Cm.CommandText = "SP_TRAER_ARTICULOS_TODOS"

            Cm.Parameters.Add("@Cod_Suc", SqlDbType.Int)
            Cm.Parameters("@Cod_Suc").Value = Cod_suc

            Cm.Connection = Cn
            Dr = Cm.ExecuteReader
            If Dr.HasRows = True Then
                While Dr.Read
                    Dim Producto As New clsCatalogo()
                    Producto.Prod_Id = Dr.GetInt32(0)
                    If Dr.IsDBNull(1) Then
                        Producto.Marca = "-"
                    Else
                        Producto.Marca = Dr.GetString(1).Trim.ToUpper
                    End If
                    If Dr.IsDBNull(2) Then
                        Producto.Modelo = "-"
                    Else
                        Producto.Modelo = Dr.GetString(2).Trim.ToUpper
                    End If

                    Producto.Cantidad = Dr.GetInt32(3)

                    If Dr.IsDBNull(4) Then
                        Producto.Proveedor = "-"
                    Else
                        Producto.Proveedor = Dr.GetString(4).Trim.ToUpper
                    End If

                    If Dr.IsDBNull(5) Then
                        Producto.Costo = 0
                    Else
                        Producto.Costo = Dr.GetDecimal(5)
                    End If

                    If Dr.IsDBNull(6) Then
                        Producto.Descripcion = "-"
                    Else
                        Producto.Descripcion = Dr.GetString(6).Trim.ToUpper
                    End If

                    Producto.Tipo = Dr.GetString(7).Trim.ToUpper
                    Producto.Fecha_Ingreso = Dr.GetDateTime(8)
                    Producto.Cod_Suc = Dr.GetInt32(9)

                    ListaArticulos.Add(Producto)
                    Producto.Dispose()
                End While

                Dr.Close()
                Cn.Close()
            End If
            Return ListaArticulos
        Catch ex As Exception
            Throw New Exception(ex.Message)
        Finally
            Cn.Dispose()
            Cm.Dispose()
        End Try
    End Function

    ''Funcion para verificar existencia de un producto por Nombre, Marca y Modelo
    Public Function ConsultaExistenciProducto(ByVal Nombre As String, ByVal Marca As String, ByVal Modelo As String) As Boolean
        Dim Cn As New SqlClient.SqlConnection
        Dim Cm As New SqlClient.SqlCommand
        Dim Dr As SqlClient.SqlDataReader
        Dim Producto As New clsCatalogo()

        Dim Conf As New clsConfiguraciones()
        Dim dao_Conf As New daoConfiguraciones()
        Conf = dao_Conf.TraeConfiguraciones()

        Try
            Cn.ConnectionString = My.Resources.Conexion
            Cn.Open()
            Cm.CommandType = CommandType.StoredProcedure
            Cm.CommandText = "SP_TRAER_ARTICULO_X_NOM_MAR_MOD"

            Cm.Parameters.Add("@nombre", SqlDbType.VarChar)
            Cm.Parameters("@nombre").Value = Nombre
            Cm.Parameters.Add("@marca", SqlDbType.VarChar)
            Cm.Parameters("@marca").Value = Marca
            Cm.Parameters.Add("@modelo", SqlDbType.VarChar)
            Cm.Parameters("@modelo").Value = Modelo

            Cm.Parameters.Add("@Cod_Suc", SqlDbType.Int)
            Cm.Parameters("@Cod_Suc").Value = Conf.Cod_Suc

            Cm.Connection = Cn
            Dr = Cm.ExecuteReader
            If Dr.HasRows = True Then
                While Dr.Read
                    Producto.Prod_Id = Dr.GetInt32(0)
                    If Dr.IsDBNull(1) Then
                        Producto.Marca = "-"
                    Else
                        Producto.Marca = Dr.GetString(1).Trim.ToUpper
                    End If
                    If Dr.IsDBNull(2) Then
                        Producto.Modelo = "-"
                    Else
                        Producto.Modelo = Dr.GetString(2).Trim.ToUpper
                    End If

                    Producto.Cantidad = Dr.GetInt32(3)

                    If Dr.IsDBNull(4) Then
                        Producto.Proveedor = "-"
                    Else
                        Producto.Proveedor = Dr.GetString(4).Trim.ToUpper
                    End If

                    If Dr.IsDBNull(5) Then
                        Producto.Costo = 0
                    Else
                        Producto.Costo = Dr.GetDecimal(5)
                    End If

                    If Dr.IsDBNull(6) Then
                        Producto.Descripcion = "-"
                    Else
                        Producto.Descripcion = Dr.GetString(6).Trim.ToUpper
                    End If

                    Producto.Tipo = Dr.GetString(7).Trim.ToUpper
                    Producto.Fecha_Ingreso = Dr.GetDateTime(8)
                    Producto.Cod_Suc = Dr.GetInt32(9)

                End While

                Dr.Close()
                Cn.Close()
            End If
            If Producto.Prod_Id > 0 Then
                Return True
            Else
                Return False
            End If
        Catch ex As Exception
            Throw New Exception(ex.Message)
        Finally
            Conf.Dispose()
            Cn.Dispose()
            Cm.Dispose()
        End Try
    End Function

    'Funcion para Traer un articulo por Id de Articulo'
    Public Function TraeArticuloCodSuc(ByVal pord_id As Integer, ByVal Cod_Suc As Int32) As clsCatalogo
        Dim Cn As New SqlClient.SqlConnection
        Dim Cm As New SqlClient.SqlCommand
        Dim Dr As SqlClient.SqlDataReader
        Dim Producto As New clsCatalogo()

        Try
            Cn.ConnectionString = My.Resources.Conexion
            Cn.Open()
            Cm.CommandType = CommandType.StoredProcedure
            Cm.CommandText = "SP_TRAER_ARTICULO"

            Cm.Parameters.Add("@prod_id", SqlDbType.Int)
            Cm.Parameters("@prod_id").Value = pord_id

            Cm.Parameters.Add("@Cod_Suc", SqlDbType.Int)
            Cm.Parameters("@Cod_Suc").Value = Cod_Suc

            Cm.Connection = Cn
            Dr = Cm.ExecuteReader
            If Dr.HasRows = True Then
                While Dr.Read
                    Producto.Prod_Id = Dr.GetInt32(0)
                    If Dr.IsDBNull(1) Then
                        Producto.Marca = "-"
                    Else
                        Producto.Marca = Dr.GetString(1).Trim.ToUpper
                    End If
                    If Dr.IsDBNull(2) Then
                        Producto.Modelo = "-"
                    Else
                        Producto.Modelo = Dr.GetString(2).Trim.ToUpper
                    End If

                    Producto.Cantidad = Dr.GetInt32(3)

                    If Dr.IsDBNull(4) Then
                        Producto.Proveedor = "-"
                    Else
                        Producto.Proveedor = Dr.GetString(4).Trim.ToUpper
                    End If

                    If Dr.IsDBNull(5) Then
                        Producto.Costo = 0
                    Else
                        Producto.Costo = Dr.GetDecimal(5)
                    End If

                    If Dr.IsDBNull(6) Then
                        Producto.Descripcion = "-"
                    Else
                        Producto.Descripcion = Dr.GetString(6).Trim.ToUpper
                    End If

                    Producto.Tipo = Dr.GetString(7).Trim.ToUpper
                    Producto.Fecha_Ingreso = Dr.GetDateTime(8)
                    Producto.Cod_Suc = Dr.GetInt32(9)

                End While

                Dr.Close()
                Cn.Close()
            End If
            Return Producto
        Catch ex As Exception
            Throw New Exception(ex.Message)
        Finally
            Cn.Dispose()
            Cm.Dispose()
        End Try
    End Function



    '---------------------------------------------------------------------
    ' Constructor de la Clase
    '---------------------------------------------------------------------
    Public Sub New()

        MyBase.New()

    End Sub

    '---------------------------------------------------------------------
    ' Destructor de la Clase
    '---------------------------------------------------------------------
    Public Sub Dispose()

        MyBase.Finalize()

    End Sub

End Class
